import pandas as pd
import itertools
import openpyxl
def find_unique_values_in_excel(file_path, search_value, search_columns, record_columns):
    """
    在Excel文件的多个列中查找指定的数值，并记录该数值所在行中其他指定列的数值，去重后输出。

    :param file_path: Excel文件的路径
    :param search_value: 要查找的数值
    :param search_columns: 要查找数值的列名列表
    :param record_columns: 要记录的列名列表
    :return: 去重后的记录值数组
    """
    # 读取Excel文件
    df = pd.read_excel(file_path)

    # 初始化一个空列表来存储记录的值
    records = []

    # 遍历DataFrame的每一行
    for index, row in df.iterrows():
        # 检查search_columns中的任何一列是否包含search_value
        if any(row[col] == search_value for col in search_columns):
            # 从record_columns指定的列中收集值
            record = tuple(row[rec_col] for rec_col in record_columns)
            # 将记录添加到列表中，但避免重复
            if record not in records:
                records.append(record)

    return records


# 示例使用
file_path = 'guihua.xlsx'  # 替换为您的Excel文件路径
search_value = 'F2_AGG'  # 您要查找的数值
search_columns = ['网关设备', '直连设备']  # 替换为您要查找的列名列表
record_columns = ['vlan']  # 替换为您要记录的列名列表

unique_records = find_unique_values_in_excel(file_path, search_value, search_columns, record_columns)

flat_records = list(itertools.chain.from_iterable(unique_records))
print(search_value,'所涉及的vlan有',flat_records)
#-----------------------------------------------------------------------------------------------------------
flat_records.insert(0, search_value)
# 打开已有的Excel文件
wb = openpyxl.load_workbook(file_path)
# 选择要写入数据的工作表，例如名为'Sheet1'的工作表
sheet = wb['Sheet2']

# 将数组元素转换为字符串并依次写入从B2开始的单元格
for idx, value in enumerate(flat_records, start=2):  # start=2表示从B2单元格开始
    sheet.cell(row=idx, column=4, value=str(value))


# 保存对工作簿的更改
wb.save(file_path)